# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/2 18:47 
@Author  : ZhangShenao 
@File    : auto_expand.py 
@Desc    : list的自动扩容机制
list的扩容采用了over-allocating机制,即每次扩容时,会多分配一部分空间,避免频繁扩容,保证了操作的高效
"""


def list_auto_expand():
    """
    list的动态扩容过程
    list的扩容采用了over-allocating机制,即每次扩容时,会多分配一部分空间,避免频繁扩容,保证了操作的高效
    """
    l = []
    print(f'size of empty list is: {l.__sizeof__()}')  # 40 空list所占的存储空间为40字节
    l.append(1)

    print(f'after append 1, size is: {l.__sizeof__()}')  # 72 添加1个元素后,size=72,扩容了72-40=32字节,即4个int元素的空间
    l.append(2)
    print(f'after append 2, size is: {l.__sizeof__()}')  # 72 由于之前预分配了4个元素的空间,因此无需扩容,容量保持不变
    l.append(3)
    print(f'after append 3, size is: {l.__sizeof__()}')  # 72 同上
    l.append(4)
    print(f'after append 4, size is: {l.__sizeof__()}')  # 72 同上

    l.append(5)
    print(f'after append 5, size is: {l.__sizeof__()}')  # 104 与分配的空间已满,触发自动扩容,又额外分配了4个int类型元素的空间


if __name__ == '__main__':
    list_auto_expand()
